package com.ruoyi.recipe.mapper;

import com.ruoyi.recipe.domain.RecipeDish;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 菜品Mapper接口
 * 
 * @author ruoyi
 * @date 2024-11-22
 */
public interface RecipeDishMapper 
{
    /**
     * 查询菜品
     * 
     * @param dishId 菜品主键
     * @return 菜品
     */
    public RecipeDish selectRecipeDishByDishId(Long dishId);

    /**
     * 查询菜品列表
     * 
     * @param recipeDish 菜品
     * @return 菜品集合
     */
    public List<RecipeDish> selectRecipeDishList(RecipeDish recipeDish);

    /**
     * 查询推荐菜品
     *
     * @param recipeDish 菜品
     * @return 菜品集合
     */
    public List<RecipeDish> selectRecommendedRecipeDish(RecipeDish recipeDish);

    /**
     * 查询最受欢迎的菜品
     *
     * @param recipeDish 菜品
     * @return 菜品集合
     */
    public List<RecipeDish> selectPopularRecipeDish(RecipeDish recipeDish);

    /**
     * 随机查询菜品
     *
     * @param recipeDish 菜品
     * @return 菜品集合
     */
    public List<RecipeDish> selectRandRecipeDish(RecipeDish recipeDish);

    /**
     * 查询已分配类别的菜品
     *
     * @param recipeDish 菜品
     * @return 菜品集合
     */
    public List<RecipeDish> selectAllocatedList(RecipeDish recipeDish);

    /**
     * 查询没有分配类别的菜品
     *
     * @param recipeDish 菜品
     * @return 菜品集合
     */
    public List<RecipeDish> selectUnallocatedList(RecipeDish recipeDish);

    public int selectMaxDishSort(RecipeDish recipeDish);

    /**
     * 校验菜品名称
     *
     * @param dishName 菜品名称
     * @return 结果
     */
    public RecipeDish checkDishNameUnique(String dishName);

    /**
     * 新增菜品
     * 
     * @param recipeDish 菜品
     * @return 结果
     */
    public int insertRecipeDish(RecipeDish recipeDish);

    /**
     * 批量新增菜品
     *
     * @param list 菜品集合
     * @return 结果
     */
    public int batchInsertRecipeDish(List<RecipeDish> list);

    /**
     * 批量新增菜品（存在则更新）
     *
     * @param list 菜品集合
     * @return 结果
     */
    public int batchInsertOrUpdateRecipeDish(List<RecipeDish> list);

    /**
     * 修改菜品
     * 
     * @param recipeDish 菜品
     * @return 结果
     */
    public int updateRecipeDish(RecipeDish recipeDish);

    /**
     * 更新菜品的标题
     *
     * @param list 菜品ID集合
     * @return 结果
     */
    public int updateDishTitle(List<Long> list);

    /**
     * 更新菜品点赞数
     *
     * @param dishIds 菜品ID数组
     * @param num 点赞数，1为增加，-1为减少
     * @return 结果
     */
    public int updateLikesCount(@Param("dishIds") Long[] dishIds, @Param("num") int num);

    /**
     * 删除菜品
     * 
     * @param dishId 菜品主键
     * @return 结果
     */
    public int deleteRecipeDishByDishId(Long dishId);

    /**
     * 批量删除菜品
     * 
     * @param dishIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteRecipeDishByDishIds(String[] dishIds);
}
